/**
 * @Author Fizz Pu
 * @Date 2020/8/22 下午8:30
 * @Version 1.0
 * 失之毫厘，缪之千里！
 */

import java.util.ArrayList;
import java.util.List;

/**
 * 冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
 * <p>
 * 现在，给出位于一条水平线上的房屋和供暖器的位置，找到可以覆盖所有房屋的最小加热半径。
 * <p>
 * 所以，你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。
 * <p>
 * 说明:
 * <p>
 * 给出的房屋和供暖器的数目是非负数且不会超过 25000。
 * 给出的房屋和供暖器的位置均是非负数且不会超过10^9。
 * 只要房屋位于供暖器的半径内(包括在边缘上)，它就可以得到供暖。
 * 所有供暖器都遵循你的半径标准，加热的半径也一样。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/heaters
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Lee475 {
    // 二分优化，怎么做，暂时想不出来了！
    public static int findRadius(int[] houses, int[] heaters) {
        // 对于每个房子，求出到供暖器的距离，取最小值,这就是最小距离。
        // 最后取所有距离的最大值
        // 暴力搜索还是不行啊。继续优化。
        int eachHouseToHeater = Integer.MAX_VALUE;
        int circle = Integer.MIN_VALUE;
        for (int house : houses) {
            for (int heater : heaters) {
                eachHouseToHeater = Math.min(eachHouseToHeater, Math.abs(house - heater));
            }
            circle = Math.max(eachHouseToHeater, circle);
            eachHouseToHeater = Integer.MAX_VALUE; // 更新，否则这次循环的值会被带入下一次循环参与计算。
        }
        return circle;
    }

    public static void main(String[] args) {
        System.out.println(Lee475.findRadius(new int[]{1, 2, 3}, new int[]{2}));
        System.out.println(Lee475.findRadius(new int[]{1, 2, 3, 4}, new int[]{1, 4}));
    }
}
